#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
//#include<bits/stdc++.h>          万能头,但不含windows.h头文件
//using namespace std;
初识C语言
/*常量
1.字面常量
2.const修饰的常变量
3.#define定义的标识符常量
4.枚举常量    
1.int main()
{
	3;//字面常量
	3.14;//字面常量
    return 0;
}
2.int main()
{
    //const--常属性
	const int num=4;//使用const修饰,变量无法改变
	printf("%d\n",num);
	num=8;
	printf("%d\n",num);
	return 0;
}
int main()
{
    const int n=10;//n是变量,但是又有常属性所以我们说n是常变量
	//int arr[n]={0};//在要使用常量的地方,n是不可以的,它只可以表示一个不能变的量
	n=20;
    return 0;
}
3.#define MAX 10
int main()
{
    int arr[MAX]={0};
	printf("%d\n",MAX);
    return 0;
}
4.枚举常量  枚举--一一列举
性别：男、女、保密
三原色：红、黄、蓝
星期:1,2,3,4,5,6,7
枚举关键字--enum
enum Sex
{
    MALE,
	FEMALE,
	SECRET
};
//MALE,FEMALE,SECRET-枚举常量
int main()
{
    //enum Sex s = FEMALE;
	printf("%d\n",MALE);//0
	printf("%d\n",FEMALE);//1
	printf("%d\n",SECRET);//2
    return 0;
}
enum Color
{
    RED,
	YELLOW,
	BLUE
};
int main()
{
    enum Color color = BLUE;
	color = YELLOW;
	//BLUE = 6;//左操作数必须为左值
    return 0;
}
*/
/*int main()                      //选择语句 
{
	int input = 0;
	printf("加入比特\n");
	printf("你要好好学习吗?(1/0)>:");
	scanf("%d",&input);//1/0
	if(input == 1) 
	  printf("好offer\n");
	else
	  printf("卖红薯\n");
	return 0;
}*/
/*int main()                        //循环语句 
{
	int line=0;
	printf("加入比特\n");
	while(line<100)/
	{
		printf("敲一行代码\n");
		line++;
	}
	if(line>=100)  //拿到好offer的条件,防止不是因敲够代码而跳出循环直接拿到好offer 
	printf("好offer");
	return 0;
}*/
/*int main()                         //数组 
{                                          //""--空字符串
	char arr1[]="abc";             //由""引起来的一串字符称为字符串字面值，简称字符串 
	  //"abc" -- 'a','b','c','\0' --'\0'字符串的结束标志    已含'\0' 
	char arr2[]={'a','b','c'};
	  //'a','b','c'    没含'\0' 
	char arr3[]={'a','b','c',0};
	printf("%s\n",arr1);                  //打印字符串使用的是%s 
	printf("%s\n",arr2);                  //打印一个字符--%c
	printf("%s\n",arr3);
	return 0;
}*/
/*int main()
{
	char arr1[]="abc";
	char arr2[]={'a','b','c'};
	printf("%d\n",strlen(arr1));   //strlen -string length- 计算字符串长度的 ,头文件为string.h 
	printf("%d\n",strlen(arr2));
	return 0;
}*/
/*int Add(int x,int y)         //函数 （写加法 ) 
{
	int z=x+y;
	return z;
}
int main()
{
	int a=10;
	int b=20;
	int sum=0;
	sum=Add(a,b);
	sum=Add(2,3);        //使用函数即可直接调用，无需再写细节
	printf("sum=%d\n",sum);
	return 0;
}*/
/*int main()                 //最初版加法 
{
	int a=0;
	int b=0;
	int sum=0;
	//输入数据-使用输入函数scanf
	scanf("%d%d",&a,&b);
	sum=a+b;
	printf("sum=%d\n",sum);
	return 0;
}*/
//数组--一组相同类型元素的集合
/*int arr[10];    //定义一个存放10个整数数字的数组
int arr[10]={1,2,3,4,5,6,7,8,9,10};   //=即赋值
char ch[20];
flort arr2[5]; 
arr   1 2 3 4 5 6 7 8 9 10  
下标: 0 1 2 3 4 5 6 7 8 9       //下标默认是从0开始
int main()
{
	int arr[10]={1,2,3,4,5,6,7,8,9,10};
	printf("%d\n",arr[4]);            //运行结果显示为5,下标的方式访问元素arr[下标]
	return 0;
}
int main()
{
	int arr[10]={1,2,3,4,5,6,7,8,9,10};
	int i=0;
	while(i<10)
	{
		printf("%d ",arr[i]);
		i++;
	}
	return 0;
}*/
/*  转义字符--转变原来的意思
\n--换行
int main()
{
    printf("abcn");
	printf("abc\n");
    return 0;
}
\t--水平制表符
\\--用于表示一个反斜杠，防止它被解释为一个转义序列符
int main()
{
    printf("c:\test\32\test.c");
	//printf("c:\\test\\32\\test.c");
    return 0;
}
\?--在书写连续多个问号时使用，防止它们被解析成三字母符-??+)-->三字母词
\'--用于表示字符常量'
\"--用于表示一个字符串内部的双引号
int main()
{
    printf("%c\n",'a');
    printf("%c\n",'\'');
	printf("%c\n",'\"');
    return 0;
}
\a--警告字符，蜂鸣
\b--退格符
\f--进纸符
\r--回车
\v--垂直制表符
\ddd--ddd表示1~3个八进制的数字。如:\130X
int main()
{
    printf("%d\n",strlen("c:\test\32\test.c"));
	printf("%c\n",'\32');
	//\32--32是2个8进制数字
	//32作为8进制代表的那个十进制数字,作为ASCII码值,对应的字符
    return 0;
}
\xdd--dd表示2个十六进制数字。如:\x30 0
int main()
{
	printf("%c\n",'\x61');
	//\x61--61是2个十六进制数字
	//61作为十六进制代表的那个十进制数字,作为ASCII码值,对应的字符
    return 0;
}
*/
/*算术操作符：+ - * / % (加，减，乘，除，取模)
移位(2进制)操作符:<<左移   >>右移
(2进制)位操作符:&按位与  |按位或  ^按位异或
异或的计算规律：对应的二进制位相同，则为零；对应的二进制位相异，则为一
口诀：与：全一则一 或：有一则一 异或：有一则一全一则零
赋值操作符: int main()       
        {
			int a=10;         
			a=20;       //=赋值  ==判断相等
			a =  a+10;
			a += 10;         //这两种写法完全等价
			a =  a-20;
			a -=20;          //这两种写法完全等价
			a =  a&2;
			a &=2;           //这两种写法完全等价
			return 0;
		}
          //复合赋值符  += -= *= /= %= >>= <<= &= |= ^=
单目操作符
双目操作符
三目操作符
//！逻辑反操作 
int main()                               //C语言中表示真假
{                                        //0--假
	int a=10;                            //非0--真
	printf("%d\n",a);    //运行结果显示为10
	printf("%d\n",!a);   //运行结果显示为0
	return 0;               
}
int main()                             
{                                        
	int a=0;                           
	printf("%d\n",a);    //运行结果显示为0
	printf("%d\n",!a);   //运行结果显示为1(把0变成真是,固定为1)
	return 0;
}

sizeof      操作数的类型长度(以字节为单位)
int main()                             
{                                       
	int a=10;
	int arr[10]={0};
	printf("%d\n",sizeof(arr));  //sizeof 也可以计算数组大小                          
	printf("%d\n",sizeof(a));  //sizeof计算的是变量/类型所占空间的大小，单位是字节
	printf("%d\n",sizeof(int)); //a的类型是int,这两种写法是完全等价的
	printf("%d\n",sizeof a);     //sizeof算变量时()可以省略
	printf("%d\n",sizeof int);   //sizeof算类型时()不可以省略
	return 0;
}
int main()
{
	int arr[10]={0};                //计算数组元素的个数
	int sz=0;                       //个数=数组总大小除以每个元素的大小
	sz=sizeof(arr)/sizeof(arr[0]);
	printf("sz=%d\n",sz);
	return 0;
}

~     对一个数的二进制按位取反 
int main()
{
    int a = 0; //整型是4个字节,32个bit位
	int b =~a; //b是有符号的整形,最高为表示的是符号位        1为负,0为正        
	//00000000000000000000000000000000
	//11111111111111111111111111111111
    //原码、反码、补码
	//任何整数在内存中存储的时候，存储的是二进制的补码，反码只是中间的计算状态
	//正数的原码、反码、补码 相同
	//11111111111111111111111111111111  补码
	//11111111111111111111111111111110  反码                             
	//10000000000000000000000000000001  原码
	//原码符号位不变，其他位按位取反得到反码
	//反码加一得到补码
	printf("%d\n",b);//使用的，打印的是这个数的原码          
	return 0;                   
}

int main()
{
    int a=10;
	int b=a++;//后置++，先使用，再++（自增）
	//int b=++a;//前置++，先++（自增）,再使用
	printf("a=%d b=%d\n",a,b);11 10
	//printf("a=%d b=%d\n",a,b);11 11	
	return 0;
}	
int main()
{
    int a=10;
	int b=a--;//后置--，先使用，再--（自减）
	//int b=--a;//前置--，先--（自减）,再使用
	printf("a=%d b=%d\n",a,b);9 10
	//printf("a=%d b=%d\n",a,b);9 9	
	return 0;
}

(类型)      强制类型转换
int main()
{
    int a=3.14; //报错:从“double”转换到“int”,可能丢失数据
	int a=(int)3.14;
    return 0;
}

关系操作符  > >= < <= !=(用于测试“不相等”) ==(用于测试“相等”)

逻辑操作符   && 逻辑与          || 逻辑或
int main()
{ 
    //真--非0                                        
	//假--0
	//&&--逻辑与                   全真为真，一假为假
	int a=3;
	int b=5;
	int c =a && b;
	printf("c=%d\n",c);1
    return 0;
}
int main()
{
    //真--非0
	//假--0
	//&&--逻辑与
	int a=o;
	int b=5;
	int c =a && b;
	printf("c=%d\n",c);0
    return 0;
}
int main()
{
    //真--非0
	//假--0
	//||--逻辑或                   一真为真，全假为假
	int a=3;
	int b=5;
	int c =a && b;
	printf("c=%d\n",c);1
    return 0;
}
int main()
{
    //真--非0
	//假--0
	//||--逻辑或
	int a=0;
	int b=5;
	int c =a && b;
	printf("c=%d\n",c);1
    return 0;
}
int main()
{
    //真--非0
	//假--0
	//||--逻辑或
	int a=0;
	int b=0;
	int c =a && b;
	printf("c=%d\n",c);0
    return 0;
}

条件操作符(三目操作符)   exp1 ? exp2 : exp3         exp为表达式   
若表达式1结果为真,表达式2被执行,表达式2结果为整个表达式的结果
若表达式1结果为假,表达式3被执行,表达式3结果为整个表达式的结果
int main()
{
    int a = 10;
	int b = 20;
	int max = 0;
	if (a > b ? a : b)
	   max=a;
	else
	   max=b;
    return 0;
}

逗号表达式    exp1,exp2,exp3,...expN

下标引用、函数调用和结构成员    [] () . ->
int main()
{
    int arr[10]={0};
	arr[4];//[]--下标引用操作符
    return 0;
}

int Add(int x,int y)
{
    int z=0;
    z=x+y;
    return z;
}
int main()
{
    int a=10;
	int b=20;
	int sum=Add(a,b);//()--函数调用操作符
    return 0;
}*/
/*  常见关键字--不能自己创建,不能做变量名
auto 自动   (一般省略)
ine main()
{
    auto int a=10;//局部变量-自动变量
    return o;
}

register---寄存器关键字
ine main()
{
    register int a=10;//建议把a定义成寄存器变量
    return o;
}

{
    int a=10;
	int a=-5;
	//int等价于signed int---有符号数
	//unsigned int--无符号数 (即永为正数，即使放入负数也视为正数)
    return o;
}

default--默认
extern--引入外部符号
struct--结构体关键字
union--联合体/共用体
void--无/空

typedef--类型定义，这里应理解为类型重命名
int main()
{
    typedef unsigned int u_int;
	signed int num=20;
	u_int num2=20;
    return 0;
}

static--在C语言中:static是用来修饰变量和函数的
1.修饰局部变量-静态局部变量      局部变量的生命周期变长
2.修饰全局变量-静态全局变量      改变了变量的作用域-让静态的全局变量只能在自己所在
                                源文件内部使用，出了源文件就没法再使用了
3.修饰函数-静态函数              也是改变了函数的作用域---不准确
                                改变了函数的链接属性---准确
								外部链接属性->内部链接属性
void test()
{
    static int a=1;//加上static,a是一个静态的局部变量
	a++;
	printf("a=%d\n",a);
}
int main()
{
    int i=0;
	while(i<5)
	{
	    test();
        i++;
	}
    return 0;
}

#define--定义常量和宏  
#define MAX 100
int main()
{
    int a=MAX;
    return 0;
}
宏-在标识符常量的基础上带参数
//函数的实现
int MAX(int x,int y)
{
    if(x>y)
	   return x;
	else
	   return y; 
}
//宏的定义
#define MAX(X,Y) (X>Y?X:Y)
int main()
{
    int a=10;
	int b=20;
	//函数的方式
	int max=MAX(a,b);
	printf("max=%d\n",max);
	//宏的方式
	max=MAX(a,b);
	//max=(a>b?a:b);
	printf("max=%d\n",max);
    return 0;
}*/
/*指针
int main()
{
    int a=10;//4个字节
	//&a;//取地址
	//printf("%p\n",&a);//%p用来打印地址
	int* p=&a;//p的类型是int*
	//有一种变量是用来存放地址的---指针变量
	//printf("%p\n",p);
    *p=20;//*--解引用操作符/间接访问操作符
	printf("%d\n",a);
	printf("%d\n",*p);
	//*p:对p进行解引用操作,找到它所指向的对象a
	//*p等于一个值,就是把通过*p找到的那个对象里的值改为等于的值
    return 0;
}
int main()
{
    char ch='w';
	char* pc=&ch;
	*pc='a';
	printf("%c\n",ch);
	return 0;
}
int main()
{
    double d=3.14;
	double* pd=&d;
	*pd=5.5;
	printf("%lf\n",d);//double类型的变量打印用%lf
	return 0;
}
指针变量的大小--指针大小在32位平台是4个字节,64位平台是8个字节
int main()
{
    char ch='w';
	char* pc=&ch;
	printf("%d\n",sizeof(pc));
	return 0;
}*/
/*结构体
//复杂对象--结构体--我们自己创造的一种类型
//创建一个结构体类型
struct Book
{
    char name[20];//C语言程序设计
	short price;//55
};//这个分号不可缺少，是专门结束这个类型定义的
int main()
{
    //利用结构体类型创建一个该类型的结构体变量
    struct Book b1={"C语言程序设计",55};
	struct Book* pb=&b1;
	//利用pb打印出我的书名和价格
	printf("%s\n",(*pb).name);
	printf("%d\n",(*pb).price);
	printf("%s\n",pb->name);
	printf("%d\n",pb->price);
	//.     结构体变量.成员
	//->    结构体指针->成员
	printf("书名:%s\n",b1.name);
	printf("价格:%d元\n",b1.price);
	//修改价格
	b1.price=15;
	printf("修改后的价格:%d\n",b1.price);
	//修改书名
	strcpy(b1.name,"C++");//strcpy-string copy-字符串拷贝-库函数-头文件string.h
	printf("%s\n",b1.name);//凡是成员为字符串,赋值形式都要用strcpy
	return 0;
}*/
/*练习
下列代码的结果是什么?
int sum(int a)
{
	int c = 0;
	static int b = 3;
	c += 1;
	b += 2;
	return (a + b + c);
}
int main()
{
	int i;
	int a = 2;
	for(i = 0; i < 5; i++)
	{
		printf("%d,",sum(a));
	}
}*/



分支循环
/*分支语句和循环语句
分支语句
1.if
2.switch
循环语句
1.while
2.for
3.do while
goto语句
C语言中由一个分号;隔开的就是一条语句，比如：
printf("hello");
1+2;
int main()
{
    int a=0;
	;//是语句-空语句
	return o;
}*/
/*分支语句(选择结构)
if语句
语法结构:
if(表达式)
    语句；


if(表达式)
  语句1;
else
  语句2;


//多分支
if(表达式)
  语句1;
else if(表达式2)
  语句2;
else
  语句3;

int main()
{
       int age=10;
    if(age<18)
	   printf("未成年\n");
    else
	{
	   if(age>=18 && age<28)     
       printf("青年\n");
	else if(age>=28 && age<50)
	   printf("壮年\n");
	else if(age>=50 && age<90)
	   printf("老年\n");
	else
	   printf("老不死\n");
	}
    //int age=10;
    //if(age<18)
	//   printf("未成年\n");
    //else if(age>=18 && age<28)     //不能写成18<=age<28
    //   printf("青年\n");
	//else if(age>=28 && age<50)
	//   printf("壮年\n");
	else if(age>=50 && age<90)
	//   printf("老年\n");
	//else
	//   printf("老不死\n");   //最后一个else也可以省略

	//if(age<18)
	//   printf("未成年\n");
	//else
	//   printf("成年\n");

	//if(age<18)
	//   printf("未成年\n");
	
	return 0;
}
如果条件成立，要执行多条语句，应该使用代码块。
int main()
{
       int age=10;
    if(age<18)
	{ 
	   printf("未成年\n");
	   printf("不能谈恋爱\n");
	}
    else
	{
	   if(age>=18 && age<28)     
       printf("青年\n");
	else if(age>=28 && age<50)
	   printf("壮年\n");
	else if(age>=50 && age<90)
	   printf("老年\n");
	else
	   printf("老不死\n");
	}
	return 0;
}
这里的一对{ }就是一个代码块。
*/
/*悬空else
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
       if(b == 2)
          printf("hehe\n");
       else
          printf("haha\n");
	return 0;
}
//else和离它最近的未匹配的if进行匹配
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
    {
	   if(b == 2)
          printf("hehe\n");
	}
    else
       printf("haha\n");
	return 0;
}
//将else与第一个if匹配的方法是将第二个if用{}括起来
*/
/*if的书写形式对比
int main()
{
    int num = 4;
	if(5 == num)
	{
	   printf("hehe\n");
	}
	//if(num = 5)// = 赋值 == 判断相等
	//{
	//   printf("hehe\n");
	//}
    return 0;
}*/
/*练习
1.判断一个数是否为奇数
2.输出1-100之间的奇数
int main()
{
	int i=1;
	while(i<=100)
	{
		if(i%2==1)
		//if(i%2!=0)
		   printf("%d ",i);
		i++;
	}
	return 0;
}
int main()                       //避开判断
{
	int i=1;
	while(i<=100)
	{
		printf("%d ",i);
		i+=2;
	}
	return 0;
}*/
/*switch语句--也是一种分支语句。常常用于多分支的情况
switch(整型表达式)//表达式类型必须为整型！！！                               
{                //char--字符类型,在内存中存的是这个字符所对应的ASCll码值,
    语句项；     //ASCll码值也是整型,所以也可以放在这里
}
语句项是什么？
//是一些case语句:
//如下:
case 整型常量表达式://必须是整型!!!常量551
    语句；
int main()
{
    int day = 0;
	scanf("%d",&day);//3
	switch(day)
	{
	case 1:
	    printf("星期1\n");
		break;
	case 2:
	    printf("星期2\n");
		break;
	case 3:
	    printf("星期3\n");
		break;          //根据表达式case的结果决定从哪里进去,由break决定从哪里出去
	case 4:
	    printf("星期4\n");
		break;
	case 5:
	    printf("星期5\n");
		break;
	case 6:
	    printf("星期6\n");
		break;
	case 7:
	    printf("星期天\n");
		break;
	}
	// if(1==day)
	//    printf("星期1\n");
    // else if(2==day)
	//    printf("星期2\n");
    // else if(3==day)
    //    printf("星期3\n");
	// else if(4==day)
    //    printf("星期4\n");
	//...
	return 0;
}
int main()
{   
    int day = 0;              //其实在循环中遇到break,就停止后期的所有循环,直接终止                                  
    int n = 0;                //循环。所以:while中的break是用于永久终止循环的。
	scanf("%d",&day);
	switch(day)               //break语句的实际效果是把语句列表划分为不同的部分
	{
	case 1:
	    if(n == 1)
		    printf("hehe\n");//switch语句中也可以出现if语句
	case 2:
	case 3:
	case 4:
	case 5:
	    printf("工作日\n");
		break;
	case 6:
	case 7:
	    printf("休息日\n");
		break;
	//如果1-7都不能进去,则走default默认情况--可有可无，如有需要，则是处理类似的非法情况
	//也可以写default,不写处理结果
	//case与default没有顺序可言,可以放在前面
	default:
	    printf("输入错误\n");
		break;
	}
	return 0;
}*/
/*练习
int main()
{
    int n=1;
	int m=2;
	switch(n)
	{
    case 1:
	    m++;
	case 2:
	    n++;
	case 3:
	    switch(n)
		{//switch允许嵌套使用
		case 1:
		    n++;
		case 2:
		    m++;
			n++;
			break;
		}
	case 4:
	    m++;
		break;
	default:
	    break;
	}
	printf("m=%d, n=%d\n",m,n);
    return 0;
}*/
/*循环语句
while循环
while(表达式)
    循环语句；
int main()
{
	int i=1;
	while(i<=10)
    {
      if(i==5)
         break;
	  printf("%d ",i);
      i++;
    }  
    return 0;
}
int main()
{
	int i=1;
	while(i<=10)
    {
      if(i==5)
         continue;  //continue--终止循环中中本次循环continue后面的代码(不再执行)
		            //直接跳转到循环的判断部分,判断循环要不要进行下一次循环
	  printf("%d ",i);
      i++;
    }  
    return 0;
}
int main()
{
	int i=1;
	while(i<=10)
    {
	  i++;
      if(i==5)
         continue;
	  printf("%d ",i);
    }  
    return 0;
}*/
/*
int main()
{
    int ch = getchar();      //getchar--接收一个键盘的字符
    putchar(ch);             //putchar在打印一个字符时和printf是一样的
	printf("%c\n",ch);
    return 0;
}

int main()
{
    int ch=0;
	//ctrl + z  
	//EOF - end of file -> -1 - 文件结束标志
	while((ch=getchar())!=EOF)
	{
	     putchar(ch);             //输入EOF代码不会结束运行,getchar会分别捕获到E O F
	}                             //输入ctrl+z 程序结束  会获取EOF
    return 0;
}

int main()
{
    int ret = 0;
    char password[20]={0};    //passwoed--密码的意思
    printf("请输入密码:>");
	scanf("%s",password);     //输入密码,并存放在password数组中
	//缓冲区还剩余一个'\n'
	//读取一下'\n'
	getchar();
	printf("请确认(Y/N):>");
	ret = getchar();//Y/N
	if(ret == 'Y')
	{
        printf("确认成功\n");	
	}
	else
	{
	    printf("放弃确认\n");
	}
    return 0;
}
int main()
{
    int ret = 0;
	int ch = 0;
    char password[20]={0};    
    printf("请输入密码:>");
	scanf("%s",password);  //密码中间存在空格时,比如:123456 ABCD
	while((ch=getchar()) != '\n')
	{
	    ;
	}   
	printf("请确认(Y/N):>");
	ret = getchar();//Y/N
	if(ret == 'Y')
	{
        printf("确认成功\n");	
	}
	else
	{
	    printf("放弃确认\n");
	}
    return 0;
}

int main()
{
    
    return o;
}

int main()
{                                        //只会输出数字字符，非数字字符不输出
	int ch = 0;
	while((ch = getchar()) != EOF)
	{
		if(ch<'0' || ch>'9')
		   continue;
	    putchar(ch);  
	}
	return 0;
}*/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
/*for循环
for(表达式1;表达式2;表达式3)
    循环语句；
//表达式1为初始化部分,用于初始化循环变量的。表达式2为条件判断部分,用于判断循环时候终止。
//表达式3为调整部分,用于循环条件的调整。
int main()                 
{
	int i=0;
	//  初始化 判断     调整
	for(i = 1;i <= 10; i++)
	{
	    printf("%d ",i); 
	}
	return 0;
}
int main()                 
{
	int i=0;
	for(i = 1;i <= 10; i++)
	{
	    if(i == 5)
		    break;
	    printf("%d ",i); 
	}                             //在for循环中的break,continue与在while循环中的作用一样
	return 0;
}
int main()                 
{
	int i=0;
	for(i = 1;i <= 10; i++)
	{
	    if(i == 5)
		    continue;
	    printf("%d ",i); 
	}
	return 0;
}
//for语句的循环控制变量
//1.不可在for循环体内修改循环变量,防止for循环失去控制
int main()
{
	int i=0;
	for(i=0;i<10;i++)
	{
		if(i=5)           //=--赋值
		    printf("haha\n");
		printf("hehe\n");
	}
	return 0;
}
//2.建议for语句的循环控制变量的取值采用"前闭后开区间"写法
int main()
{
	int arr[10]={1,2,3,4,5,6,7,8,9,10};
	int i=0;
	for(i=0;i<10;i++)
	{                                     //i=0;i<10----前闭后开
		printf("%d ",arr[i]);
	}
	return 0;
}
int main()
{
	int arr[10]={1,2,3,4,5,6,7,8,9,10};
	int i=0;
	for(i=0;i<=9;i++)
	{                                     //i=0;i<=9-----前闭后闭
		printf("%d ",arr[i]);             //也是正确的,只是不建议
	}
	return 0;
}*/
/*一些for循环的变种
int main()
{
    for(;;)              //不一定同时省略,也可以省略某一个部分
	{
	   printf("hehe\n");
	}
    return 0;
}
//for循环的初始化、调整、判断 都可以省略
//但是:
//for循环的判断部分如果被省略,那判断条件就是:恒为真
//ps:如果不是非常熟练,建议不要随便省略
int main()
{
    int i=0;
	int j=0;
    for(i=0;i<10;i++)
    {
    	for(j=0;j<10;j++)
    	{
    		printf("hehe\n");
		}
	}
    return 0;
}
int main()
{
    int i=0;
	int j=0;
    for(;i<10;i++)
    {
    	for(;j<10;j++)             //j的值没有被销毁重新赋予
    	{
    		printf("hehe\n");
		}
	}
    return 0;
}

int main()
{
	int x,y;
	for(x = 0,y = 0; x<2 && y<5; ++x, y++)
	{
		printf("hehe\n");
	}
	return 0;
}*/
/*一道笔试题
//请问循环要循环多少次?
int main()
{
	int i = 0;
	int k = 0;
	for(i = 0,k = 0; k = 0; i++,k++)
	    k++;
	return 0;
}
//答案:0次
//k=0(第二个)不是判断语句,而是把0赋值给k,0为假,所以循环压根不进去
//若k被赋值为1(k=1),只要是非零,结果就是死循环
*/
/*do...while()循环
do
    循环语句;
while(表达式);
int main()
{
	int i = 1;
	do
	{
		printf("%d ",i);
	   i++;
	}
	while(i<=10);
	return 0;
}
int main()
{
	int i = 1;
	do
	{
		if(i == 5)
		   break;
		printf("%d ",i);
	   i++;
	}
	while(i<=10);
	return 0;
}
int main()
{
	int i = 1;
	do
	{
		if(i == 5)
		   continue;
		printf("%d ",i);
	   i++;
	}
	while(i<=10);
	return 0;
}
//do语句的特点:循环至少执行一次
*/
/*练习
1.计算n的阶乘
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		ret = ret * i;
	}
	printf("ret = %d\n",ret);
	return 0;
}
2.计算1!+2!+3!+......+10!       
int main()                             //不考虑溢出的情况(一个整型里面放不下)
{
	int i = 0;
	int n = 0; 
	int ret = 1;
	int sum = 0;
	for(n=1;n<=10;n++)
	{
		ret = 1;
		for(i=1;i<=n;i++)
	    {
		    ret = ret * i;
	    }
	    sum=sum + ret;
	}
	printf("sum = %d\n",sum);
	return 0;
}
int main()      
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int sum = 0;
	for(n=1;n<=10;n++)
	{
	    ret = ret * n;
	    sum=sum + ret;
	}
	printf("sum = %d\n",sum);
	return 0;
}
3.在一个有序数组中查找具体的某个数字n。编写int binsearch(int x,int v[],int n);功能:在v[0]
<=v[1]<=v[2]<=...<=v[n-1]的数组中查找x。
//从前往后遍历
int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	int k = 7;
	int i = 0;
	int sz = sizeof(arr)/sizeof(arr[0]);
	for(i=0; i<sz; i++)
	{
		if(k == arr[i])
		{
			printf("找到了，下标是：%d\n",i);
			break;
		}
	}
	if(i == sz)
	    printf("找不到\n");
	return 0;
}
//折半查找算法/二分查找算法
int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	int k = 7;
	int sz = sizeof(arr)/sizeof(arr[0]);//计算元素个数 
	int left = 0;//左下标 
	int right = sz-1;//右下标 
	while(left<=right)
    {
    	int mid = (left+right)/2;
	    if(arr[mid] > k)
	    {
	    	right = mid - 1;
		}
		else if(arr[mid] < k)
		{
			left = mid+1;
		}
		else
		{
			printf("找到了，下标是：%d\n",mid);
			break;
		}
	}
	if(left>right)
	{
		printf("找不到\n");
	}
	return 0;
}
4.编写代码,演示多个字符从两端移动,向中间汇聚。
int main()
{
	//
	//welcome to bit!!!!!!
	//####################
	//w##################!
	//we################!!
	//wel##############!!!
	//...
	//welcome to bit!!!!!!
	//
	char arr1[] = "welcome to bit!!!!!!";
	char arr2[] = "####################";
	int left = 0;
	//int right = sizeof(arr1)/sizeof(arr1[0])-1;//错误，应为-2
	    //char arr[] = "abc";
 	    //[a b c \0]
	    // 0 1 2 3
	    //4-2
	//ps:整型数组无需考虑\0问题,但字符串或字符数组要考虑\0是否会引起下标加1
	int right = strlen(arr1)-1; 
	while(left<=right)
	{
	    arr2[left] = arr1[left];
	    arr2[right] = arr1[right];
	    printf("%s\n",arr2);
	    //休息一秒
		Sleep(1000);//单位是毫秒 
		//Sleep的头文件是windows.h
		//休息一秒后屏幕清空再打印
		system("cls"); 
		//system--执行系统命令的一个函数--头文件是stdlib.h 
		//cls--清空屏幕 
	    left++;
	    right--;
	}
	printf("%s\n",arr2);	
	return 0;
}
5.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录
成功,如果三次均输入错误,则退出程序。)
int main()
{
	int i = 0;
	char password[20] = {0};
	for(i=0; i<3; i++)
	{
		printf("请输入密码:>");
		scanf("%s",password);
		//if(password == "123456")//正确密码为123456
		//== 不能用来比较两个字符串是否相等，应该使用一个库函数-strcmp
		if(strcmp(password,"123456") == 0)//如果相等会返回一个0
		{                            //如果第一个字符串大于第二个字符串会返回一个大于0的数字
			printf("登录成功\n");     //如果第一个字符串小于第二个字符串会返回一个小于0的数字
			break;
		}
		else
		{
			printf("密码错误\n");
		} 
	}
	if(i == 3)
	    printf("三次密码均错误，退出程序\n");
	return 0;
}*/
/*练习
下面代码执行的结果是:
int main()
{
	int i = 0;
	for(i = 0;i<10; i++)
	{
		if(i = 5)
		   printf("%d ",i);
	}
	return 0;
}
则func(1)=(   )
int func(int a)
{
	int b;
	switch(a)
	{
		case 1: b = 30;
		case 2: b = 20;
		case 3: b = 16;
		default: b = 0;
	}
	return b;
}
写代码将三个数按从大到小输出
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d%d%d",&a,&b,&c);//2 1 3 
	//算法实现
	//a中放最大值 
	//b次之
	//c中放最小值 
	if(a<b)
	{
		int tmp = a;   //tmp--临时变量 
		a = b;
		b = tmp;
	}
	if(a<c)
	{
		int tmp = a;   
		a = c;
		c = tmp;
	}
		if(b<c)
	{
		int tmp = b;   
		b = c;
		c = tmp;
	}
	printf("%d %d %d\n", a, b, c);
	return 0;
}
写一个代码打印1-100之间所有3的倍数的数字
int main()
{
	int i = 0;
	for(i = 1; i<=100;i++)
	{
		if(i%3 == 0)
		    printf("%d ",i);
	}
	return 0;
}
给定两个数,求这两个数的最大公约数
int main()
{
    int m = 0;                              //辗转相除法
    int n = 0;
    int r = 0;
    scanf("%d%d",&m,&n);
    while(r=m%n)
    {
    	m = n;
    	n = r;
	}
	printf("%d\n",n);
	return 0;
}
打印1000到2000年之间的闰年
int main()
{
	int year = 0;
	int count = 0;
	for(year=1000;year<=2000;year++)
	{
		//判断year是否为闰年的方法 
		//1.能被4整除并且不能被100整除 
		//2.能被400整除
		//if(year%4==0 && year%100!=0)
		//{
		//	printf("%d ",year);
		//	count++;
		//}
		//else if(year%400==0)
		//{
		//	printf("%d ",year);
		//	count++;
		//}
		if(((year%4==0)&&(year%100!=0))||(year%400==0))
		{
			printf("%d ",year);
			count++;		
		}
	}
	printf("\ncount = %d\n",count);
	return 0;
}
写一个代码:打印100~200之间的素数
int main()
{
	int i = 0;
	int count = 0;
	for(i=100;i<=200;i++)
	{
		//判断i是否为素数 
		//素数判断的规则 
		//1.试除法 
		//产生2->i-1
		int j = 0;
		for(j=2; j<i; j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		if(j == i)
		{
			count++;
			printf("%d ",i);
		}
	}
	printf("\ncount=%d\n",count);
	return 0;
}
优化写法:
int main()
{
	int i = 0;
	int count = 0;
	for(i=100;i<=200;i++)
	{
		int j = 0;
		for(j=2; j<=sqrt(i); j++)   //sqrt - 开平方的数学库函数 - 头文件为math.h 
		{
			if(i%j == 0)
			{
				break;
			}
		}
		if(j>sqrt(i))
		{
			count++;
			printf("%d ",i);
		}
	}
	printf("\ncount=%d\n",count);
	return 0;
}
再优化:
int main()
{
	int i = 0;
	int count = 0;
	for(i=101;i<=200;i+=2)    //因为偶数不可能是素数
	{
		int j = 0;
		for(j=2; j<=sqrt(i); j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		if(j>sqrt(i))
		{
			count++;
			printf("%d ",i);
		}
	}
	printf("\ncount=%d\n",count);
	return 0;
}*/
/*练习
以下程序的输出结果是(  )
int main()
{
	int a = 0, b = 0;
	for(a = 1, b = 1; a <= 100;a++)
	{
		if(b >= 20) break;
		if(b % 3 == 1)
		{
			b = b + 3;
			continue;
		}
		b = b - 5;
	}
	printf("%d\n",a);
	return 0;
}
编写程序数一下1到100的所有整数中出现多少个数字9
int main()
{
	int i = 0;
	int count = 0;
	for(i=1; i<=100; i++)
	{
		if(i%10 == 9)
		    count++;
		if(i/10 == 9)    //不能使用else if,如果使用了,99在第一个if那成立后不会进入else if
		    count++;     //去掉else,两个if才成为并列关系
	}
	//9 19 29 39 .. 99 - 10
	//90 91 92 .... 99 - 10
	printf("count=%d\n",count);
	return 0;
}
计算1/1-1/2+1/3-1/4+1/5......+1/99-1/100的值,打印出结果
int main()
{
	int i = 0;
	double sum = 0.0;
	int flag = 1;
	for(i=1; i<=100; i++)
	{
		sum += flag*1.0/i;
		flag = -flag;             
	}
	//1/1+1/2+1/3.....
	//1+0+0+0...=1
	//1除1等于1,1除2商0余1...... 
	//如果想得到小数,除号两边必须得有一个数是浮点数 
	printf("%lf\n",sum);
	return 0;
}
求10个整数中最大值
int main()
{
	int arr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
	//int max = 0;//最大值
	//若max初始值为0,则存在问题。如果数组为-1,-2,-3....-10,其算出的最大值为0 
	int max = arr[0];
	int i = 0;
	int sz = sizeof(arr)/sizeof(arr[0]);
	for(i=1; i<sz; i++)
	{
		if(arr[i] > max)
		{
			max = arr[i];
		}
	} 
	printf("max = %d\n",max);
	return 0;
}
在屏幕上输出9*9乘法口诀表
int main()
{
	int i = 0;
	//确定打印九行 
	for(i=1; i<=9; i++)
	{
		//打印一行
		int j = 1;
		for(j=1; j<=i; j++) 
		{
			printf("%d*%d=%-2d ", i, j ,i*j);
			//%2d -- d和%之间出现2,表示打印这个数字直接打印两位,如果该数字不够两位就用空格补齐(右对齐） 
			//%-2d -- 左对齐 
		}
		printf("\n");
	}
	return 0;
}*/
/*猜数字游戏
//1.电脑会生成一个随机数
//2.猜数字
void menu()
{
	printf("*********************************\n");
	printf("****  1. play        0.exit  ****\n");
	printf("*********************************\n"); 
}
//RAND_MAX-32767
void game()
{
	//1.生成一个随机数
	int ret = 0; 
	int guess = 0;//接受猜的数字 
	//拿时间戳来设置随机数的生成起始点 
	//time_t time(time_t*timer)       time函数的头文件--time.h 
	//time_t        
	//在调用rand前需要先调用srand
	//()需给整型  -- 需要在变 
	//时间戳 -- 当前计算机的时间-计算机的起始时间(1970.1.1.0:0:0) = (xxxx)秒 
	//ret = rand();//生成随机数 --头文件stdlib.h 
	ret = rand()%100+1;//生成1-100之间的随机数
	//printf("%d\n",ret);
	//2.猜数字 
	while(1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if(guess>ret)
		{
			printf("猜大了\n");
		}
		else if(guess<ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你，猜对了\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//srand生成随机数的起点只要在整个代码里设置一次就可以了,不要频繁设置
	//放在game函数里玩一次设置一次不太好(很接近甚至一样) 
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch(input)
		{
			case 1:
				game();//猜数字游戏
				break;
		    case 0:
		    	printf("退出游戏\n");
			    break; 
			default:
				printf("选择错误\n");
				break;
		}
	}while(input);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
	return 0;
}*/
/*goto语句
int main()
{
again:
	printf("hello bit\n");
	goto again;
	return 0;
}
int main()
{
	printf("hello bit\n");
	goto again;
	printf("你好\n");
again:
	printf("hehe\n");
	return 0;
}
//goto语句可以在代码里跳来跳去,随意乱跳,容易让代码执行流程被打乱
//在某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,
//例如一次跳出两层或多层循环。
//这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层循环
//goto语句真正适合的场景如下:
for(...)
    for(...)
	{
	    for(...)
		{
		    if(disaster)
			    goto error;
		}
	}
	...
error:
    if(disaster)
// 处理错误情况

一个关机程序
int main()
{
	char input[20] = {0};
	//shutdown -s -t 60
	//shutdown -s --设置关机 -t --设置时间关机  60 -- 60秒后关机
	//shutdown -a --取消关机
	//system()- 执行系统命令的
	system("shutdown -s -t 60");//system -- 头文件--stdlib.h 
again:
	printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n请输入>:"); 
	scanf("%s",input);
	if(strcmp(input,"我是猪") == 0)//比较两个字符串-strcmp() -- 头文件--string.h 
	{
	    system("shutdown -a");	
	} 
	else 
	{
		goto again;
	}
	return 0;
}
//不用goto语句的写法
int main()
{
	char input[20] = {0};
	system("shutdown -s -t 60");
    while(1)
    {
	    printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n请输入>:"); 	
		scanf("%s",input);
	    if(strcmp(input,"我是猪") == 0) 
	    {
	    system("shutdown -a");	
	    break;
	    } 
	}
    return 0;
}*/



函数和递归
/*在C语言中函数分为:
1.库函数  -- C语言本身提供给我们的函数
IO函数                            //查询工具
字符串操作函数                    //MSDN(Microsoft Developer Network)
字符操作函数                      //www.cplusplus.com
内存操作函数                      //http://en.cppreference.com(en英文版zh中文版)
时间/日期函数                     
数学函数                          
其他库函数                        
2.自定义函数 -- 自己设计
*/                   
/*库函数
int main()
{
	char arr1[] = "bit";
	char arr2[20] = "###########";
	strcpy(arr2,arr1);   //头文件 --string.h      前为目的地,后为源头 
	printf("%s\n",arr2); 
	//strcpy拷贝包括'\0' 
	//strcpy - string copy - 字符串拷贝
	//strlen - string length - 跟字符串长度有关 
	return 0;
}

int main()
{
	//memset  --  memory-内存   set-设置
	char arr[] = "hello world";
	memset(arr,'*',5);
	printf("%s\n",arr); 
	return 0;
}*/
/*自定义函数
函数的组成
ret_type fun_name(para1, * )                             int Add(int x,int y)
{                                                        {
    statement;//语句项     大括号内为函数体                   int z=x+y;
}                          函数体交代的是函数的实现           return z;
ret_type 返回类型                                         }
fun_name 函数名
para1    函数参数

写一个函数可以找出两个整数中的较大值
//定义函数 
int get_max(int x,int y)
{
	if(x>y)
	   return x;
    else
       return y;
} 
int main()
{
	int a = 10;
	int b = 20;
	//函数的使用 
	int max = get_max(a,b);
	printf("max = %d\n",max);
	max = get_max(100,300);
	printf("max = %d\n",max);
	return 0;
}

写一个函数可以交换两个整形变量的内容
普通写法
int main()
{
	int a = 10;
	int b = 20;
	int tmp = 0;
	printf("a=%d b=%d\n",a,b);
	tmp = a;
	a = b;
	b = tmp;
	printf("a=%d b=%d\n",a,b);
	return 0;
}
函数写法
//当实参传给形参的时候
//形参其实是实参的一份临时拷贝
//对形参的修改是不会改变实参的
//void Swap1(int x, int y)  //void--无、空的意思--代表这个函数没有返回值 
//{
//	int tmp = 0;
//	tmp = x;
//	x = y;
//	y = tmp;
//}
void Swap2(int* pa, int* pb)  
{
	int tmp = 0;
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	printf("a=%d b=%d\n",a,b);
	//调用Swap1函数
    //Swap1(a,b);    不能完成任务
	//调用Swap1函数
    Swap2(&a,&b);
	printf("a=%d b=%d\n",a,b);
	return 0;
}*/
/*函数的参数
实际参数(实参):
真实传递给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在
进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所
以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
*/
/*函数的调用
传值调用:
函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参
传址调用:
传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式
这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量
练习
1.写一个函数可以判断一个数是不是素数
int is_prime(int n)
{ 
	int j = 0;
	for(j=2;j<n;j++)
	//优化 
	//for(j=2;j<=sqrt(n);j++)
	{
		if(n%j == 0)
	    	return 0;
	}
	return 1;
}
int main()
{
	//打印100-200之间的素数 
	int i = 0;
	for(i=100; i<=200; i++)
	{
		//判断i是否为素数 
		if(is_prime(i) == 1)
		printf("%d ",i);
	}
	return 0;
}
2.写一个函数判断一年是不是闰年
int is_leap_year(int y)
{
	if((y%4==0&&y%100!=0) || (y%400==0))
	    return 1;
	else
	    return 0;
}
int main()
{
	int year=0;
	for(year=1000;year<=2000;year++)
	{
		//判断year是否为闰年
		if(1 == is_leap_year(year))
		{
		    printf("%d ",year);	
		} 
	}
	return 0;
}
3.写一个函数,实现一个整形有序数组的二分查找
//本质上这里的arr是一个指针 
//int binary_search(int arr[],int k)//形参和实参的名字相同是没有问题的，语法是支持的 
int binary_search(int arr[],int k, int sz)
{
	//算法的实现
	//int sz = sizeof(arr)/sizeof(arr[0]);//数组传参传过去在内部是不能用这样的方式求元素个数的 
	int left = 0;
	int right = sz-1;
	while(left<=right)
	{
		int mid = (left+right)/2;//中间元素的下标 
	    if(arr[mid] < k)
	    {
		    left = mid +1;
	    }
	    else if(arr[mid] > k)
	    {
		    right = mid-1;
	    }
	    else
	    {
		    return mid;
	    }
	}
	return -1;
}
int main()
{
	//二分查找 
	//在一个有序数组中查找具体的某个数 
	//如果找到了返回这个数的下标，找不到的返回-1
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int k = 7;
	int sz = sizeof(arr)/sizeof(arr[0]); 
	//int ret = binary_search(arr, k);  //这里的arr仅仅只是传过去首元素的地址 
	int ret = binary_search(arr, k, sz); 
	if(ret == -1)
	{
		printf("找不到指定的数字\n");
	} 
	else
	{
		printf("找到了，下标是：%d\n",ret);
	}
	return 0;
}
4.写一个函数,每调用一次这个函数,就会将num的值加1
void Add(int* p)
{
	(*p)++;
}
int main()
{
	int num = 0;
	Add(&num);
	printf("num = %d\n",num);
	Add(&num);
	printf("num = %d\n",num);
    Add(&num);
	printf("num = %d\n",num);
	return 0;
}*/
/*函数的嵌套调用和链式访问
函数和函数之间可以有机的组合的
嵌套调用
void new_line()
{
    printf("hehe\n");
}
void three_line()
{
    int i = 0;
	for(i=0; i<3; i++)
	{
	    new_line();
	}
}
int main()
{
   three_line();
   return 0;
}
链式访问
把一个函数的返回值作为另外一个函数的参数
int main()
{
	int len = 0;
	//1
	len = strlen("abc");
	printf("%d\n",len);
	//2
	printf("%d\n",strlen("abc"));
	return 0;
}

int main()
{
	printf("%d",printf("%d",printf("%d",43)));
	//printf的返回值是打印的字符的个数
	return 0;
}*/
/*函数的声明和定义
函数声明:
1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,无关紧要。
2.函数的声明一般出现在函数的使用之前。要满足先声明后使用。
3.函数的声明一般要放在头文件中的。
#include"add.h"  //引自己写的头文件用"",引库里的头文件用<>
add.h    add.c    test.c
如果加法是一个独立的模块,把函数的声明放到.h文件中,把函数的实现放到.c文件中,如果哪里用引用一下头文件
函数定义：
函数的定义是指函数的具体实现,交代函数的功能实现
//函数声明 
int Add(int x,int y);//声明的结尾加上';',x和y可以省略掉 ，加上也没有语法错误 
                                   //int Add(int, int);
int main()
{
	int a = 10;
	int b = 20;
	int sum = 0;
	//函数调用 
	sum = Add(a,b);
	printf("%d\n",sum);
	return 0;
}
//函数的定义 
int Add(int x,int y)
{
	int z = x+y;
	return z;
}
函数定义:函数的定义是指函数的具体实现,交待函数的功能实现。
*/
/*函数递归







*/



























































































































































































































































































































































































































































































？